﻿#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//int main()
//{
//	int num = -1;
//	int n = num >> 1;
//	printf("num=%d\n", num);
//	printf("n=%d\n", n);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int a = 10;
//	int b = 5;
//	int c = a & b;
//	int d = a | b;
//	int e = a ^ b;
//	int f = ~b;
//	printf("a & b=%d\n", c);
//	printf("a | b=%d\n", d);
//	printf("a ^ b=%d\n", e);
//	printf("~b=%d\n", f);
//}

//#include<stdio.h>
//int main()
//{
//	int a = 1;
//	int b = ~a;
//	printf("%d", b);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int num = 10;
//	int count = 0;
//	while (num)
//	{
//		if (num % 2 == 1)
//			count++;
//		num /= 2;
//	}
//	printf("%d", count);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int num = -1;
//	int count = 0;
//	for (int i = 0; i < 32; i++)
//	{
//		if (num & 1)
//			count++;
//		num >>= 1;
//	}
//	printf("%d", count);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int num = -1;
//	int count = 0;
//	while (num)
//	{
//		count++;
//		num = num & (num - 1);
//	}
//	printf("%d", count);
//	return 0;
//}

// 10 :  00001010
//10-1:  00001001
//10&9:  00001000   8
// 8-1:  00000111
// 7&6:  00000000   0  循环停止
//

//#include<stdio.h>
//int main()
//{
//	int num = 3;
//	num = num | (1 >> 4);
//	num = num ^ (1 >> 4);
//	//变回去的这一步还可以写成：
//	//num = num & ~(1 >> 4);
//	printf("%d", num);
//	return 0;
//}
//
//#include<stdio.h>
//int main()
//{
//	int a = 1;
//	int b = 2;
//	int c = (a > b, a = b + 10, a, b = a + 1);
//	printf("%d", c);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int a;
//	//对a赋值
//	a = get_val();
//	count_val(a);
//	while (a > 0)
//	{
//		//业务处理
//		//...
//		a = get_val();
//		count_val(a);
//	}
//
//	while (a = get_val(), count_val(a), a > 0)
//	{
//		//业务处理
//	}
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int arr[2] = { 2,3 };
//	printf("%d %d", 0[arr],1[arr]);
//	return 0;
//}

//#include <stdio.h>
//void test1()
//{
//	printf("hehe\n");
//}
//void test2(const char* str)
//{
//	printf("%s\n", str);
//}
//int main()
//{
//	test1(); //这里的()就是作为函数调用操作符。
//	test2("hello world.");//这里的()就是函数调用操作符。
//	return 0;
//}

//#include<stdio.h>
//
//
////代码1：变量的定义
//struct Point
//{
//	int x;
//	int y;
//}p1; //声明类型的同时定义变量p1
//struct Point p2; //定义结构体变量p2
//
////代码2:初始化。
//struct Point p3 = { 10, 20 };
//struct Stu //类型声明
//{
//	char name[15];//名字
//	int age; //年龄
//};
//struct Stu s1 = { "zhangsan", 20 };//初始化
//struct Stu s2 = { .age = 20, .name = "lisi" };//指定顺序初始化
//
//struct Node
//{
//	int data;
//	struct Point p;
//	struct Node* next;
//}n1 = { 10, {4,5}, NULL }; //结构体嵌套初始化
//struct Node n2 = { 20, {5, 6}, NULL };//结构体嵌套初始化

//#include <stdio.h>
//struct Point
//{
//	int x;
//	int y;
//}p = { 1,2 };
//int main()
//{
//	printf("x: %d y: %d\n", p.x, p.y);
//	return 0;
//}

//#include <stdio.h>
//struct Point
//{
//	int x;
//	int y;
//};
//
//int main()
//{
//	struct Point p = { 3, 4 };
//	struct Point* ptr = &p;
//	ptr->x = 10;
//	ptr->y = 20;
//	printf("x = %d y = %d\n", ptr->x, ptr->y);
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//struct Stu
//{
//	char name[15];//名字
//	int age; //年龄
//};
//void print_stu(struct Stu s)
//{
//	printf("%s %d\n", s.name, s.age);
//}
//void set_stu(struct Stu* ps)
//{
//	strcpy(ps->name, "李四");//strcpy是一个库函数，作用是将"李四"放进ps->name里
//	ps->age = 28;}
//int main()
//{
//	struct Stu s = { "张三", 20 };
//	print_stu(s);
//	set_stu(&s);
//	print_stu(s);
//	return 0;
//}